package start.spring.basic.job.controller;

import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;

import start.spring.basic.enums.ServiceEnum;
import start.spring.basic.page.PageResult;
import start.spring.basic.response.ResponseData;
import start.spring.basic.response.ResponsePage;

/**
 * 
 * ****************************************************************************
 * controller公共基类，用于扩展公共方法
 *
 * @author(作者)：xuyongyun	
 * @date(创建日期)：2021年1月29日
 ******************************************************************************
 */
public class BaseController {

	/**
	 * 根据枚举返回错误提示
	 *
	 * @param serviceEnum 枚举
	 * @return
	 * @since           1.0
	 */
	public <T> ResponseData<T> error(ServiceEnum serviceEnum) {
		return ResponseData.error(serviceEnum.getCode(),serviceEnum.getDesc());
	}

	/**
	 * 根据校验错误信息返回错误提示
	 *
	 * @param result 错误信息
	 * @return
	 * @since           1.0
	 */
	public <T> ResponseData<T> error(BindingResult result) {
		if(result!=null&&result.hasErrors()&&result.getErrorCount()>0) {
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.append(getFirstBindingResult(result));
			stringBuilder.append("！");
			return ResponseData.errorMsg(stringBuilder.toString());
		}else {
			return ResponseData.errorMsg("传入的BindingResult对象未找到错误信息，请检查程序代码！");
		}
	}

	/**
	 * 
	 * 获取多个校验错误中的第一个
	 *	
	 * @param result
	 * @return
	 * @since           1.0
	 */
	private String getFirstBindingResult(BindingResult result) {
		List<FieldError> fieldErrors = result.getFieldErrors();
		return fieldErrors.get(0).getDefaultMessage();
	}
	
	/**
	 * 返回分页查询响应结果
	 *	
	 * @param response
	 * @param queryResult
	 * @return
	 * @since           1.0
	 */
	public <T> ResponsePage<T> returnResponse(PageResult<T> queryResult) {
		return ResponsePage.success(queryResult);
	}
	
	/**
	 * 返回分页查询响应结果
	 *	
	 * @param response
	 * @param queryResult
	 * @return
	 * @since           1.0
	 */
	public <T> PageResult<T> returnResponse(HttpServletResponse response,
			PageResult<T> queryResult) {
		return queryResult;
	}
	
}
